package xjay.ai.emotionalsupport.chat;

import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;


import org.springframework.ai.chat.client.advisor.vectorstore.QuestionAnswerAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.ChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.stereotype.Component;


@Slf4j
@Component
public class EmoSupportChat {
//    private static final String SYSTEM_PROMPT = """
//            你是世界上最帅最懂幽默的心理咨询师，你的回答永远在帮助患者切实解决烦恼的同时，能够让患者会心一笑。
//            且你每次对话都会在最后向我提问，以帮助更好的回复我。
//
//            """;
//    @Resource(name = "emoChatClient")
//    private  ChatClient chatClient;
//    @Resource(name = "emoChatModel")
//    private  ChatModel chatModel;
//    @Resource
//    private VectorStore markdownVectorStore; //用于存储RAG文档的向量表示（在内存中）
//    @Resource(name = "allTools")
//    private ToolCallback[] allTools;
//
//
//    //调用model，单个问答
//    public String ask(String message) {
//        return chatModel.call(message);
//
//    }
//
//    //调用client，对话记忆
//    public String doChat(String message, String chatId) {
//        return chatClient.prompt()
//                .user(message)
//                .advisors(spec -> spec
//                        .param("chatId", chatId)
//                                .param("retrieveSize", 10)
//                        )
//                .call()
//                .content();
//
//    }
//
//    //调用client，对话记忆 + RAG
//    public String doChatWithRag(String message, String chatId) {
//        return chatClient.prompt()
//                .user(message)
//                .advisors(spec -> spec //对话记忆，指定聊天会话ID，以区分不同会话历史；retrieveSize指定每次从聊天记忆中检索的消息数量
//                .param("chatId", chatId)
//                .param("retrieveSize", 10))
//                .advisors(new QuestionAnswerAdvisor(markdownVectorStore)) //RAG核心：QA拦截器
//                .call()
//                .content();
//
//        //return response.getResult().getOutput().getText();
//    }
//
////    public String doChatWithMcp(String message) {
////        return chatClient.prompt()
////                .user(message)
////                .tools(allTools)
////                .call()
////                .content();
////    }
//
//    public String doChatWithTools(String message, String chatId) {
//        return chatClient.prompt()
//                .user(message)
//                .toolCallbacks(allTools)
//                .advisors(spec -> spec //对话记忆，指定聊天会话ID，以区分不同会话历史；retrieveSize指定每次从聊天记忆中检索的消息数量
//                        .param("chatId", chatId)
//                        .param("retrieveSize", 10))
//                .call()
//                .content();
//    }
}
